
package CCT220_Trabalho04_13106.view;


import java.util.LinkedList;
import java.util.Vector;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

import CCT220_Trabalho04_13106.control.ControleAssentamento;
import CCT220_Trabalho04_13106.model.Assentamento;
import CCT220_Trabalho04_13106.model.Disciplina;
import CCT220_Trabalho04_13106.model.Estudante;


/**
 * </br>******************************
 * </br>Project: CCT220
 * </br>Package: CCT220_Trabalho04_13106.view
 * </br>Class: LimiteAssentamento
 * </br>Last Change: 08/10/2011 11:24:30 by marcel
 * </br>Description: Class the manage the limit between the Assentamento entity
 * and the user
 * </br>******************************</br>
 * 
 * @author marcel
 * @author 13106
 * 
 */
public class LimiteAssentamento {

	/**
	 * ControleAssentamento
	 */
	private final ControleAssentamento ctrAssentamento;


	/**
	 * </br>******************************
	 * </br>Constructor for
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>LastChange: 08/10/2011 11:24:32 by marcel
	 * </br>******************************</br>
	 * 
	 * @param ctrAssentamento
	 */
	public LimiteAssentamento(ControleAssentamento ctrAssentamento) {

		this.ctrAssentamento = ctrAssentamento;
	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: montaMenu
	 * </br>Last Change: 08/10/2011 11:24:34 by marcel
	 * </br>Description: Method that show the options to the user and return the
	 * chosen one
	 * </br>******************************</br>
	 * 
	 * @return the chosen option
	 */
	public int montaMenu() {

		int escolha = -1;
		String escolhaInformada = "";
		do {

			escolhaInformada = JOptionPane
			        .showInputDialog("Escolha uma opção do menu principal>assentamento:\n"
			                + "[1] Adicionar assentamento\n"
			                + "[2] Listar um assentamento\n"
			                + "[3] Listar todos assentamentos\n"
			                + "[4] Remover assentamento\n"
			                + "[5] Voltar & salvar ");
			try {
				escolha = Integer.parseInt(escolhaInformada);
				if ((escolha < 1) || (escolha > 5)) {
					JOptionPane.showMessageDialog(null,
					        "Use apenas números entre 1 e 5!!!", "Erro",
					        JOptionPane.ERROR_MESSAGE);
				}
			} catch (NumberFormatException nExc) {
				JOptionPane.showMessageDialog(null, "Use apenas números!!!",
				        "Erro", JOptionPane.ERROR_MESSAGE);
			}

		} while ((escolha < 1) || (escolha > 5));
		return escolha;
	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: capturaDadosCadastrais
	 * </br>Last Change: 08/10/2011 11:24:36 by marcel
	 * </br>Description: Method that capture the data for the new entity of
	 * Assentamento
	 * </br>******************************</br>
	 * 
	 * @param linkedListEstudantes
	 * @param linkedListDisciplinas
	 * @return Assentamento
	 */
	public Assentamento capturaDadosCadastrais(
	        LinkedList<String> linkedListEstudantes,
	        LinkedList<String> linkedListDisciplinas) {

		int dados = Integer.parseInt(JOptionPane
		        .showInputDialog("Digite o codigo para o assentamento"));

		Estudante e = this.selectEstudante(linkedListEstudantes);
		Vector<Disciplina> listaDisciplinas = this
		        .selectDisciplinas(linkedListDisciplinas);

		return new Assentamento(dados, e, listaDisciplinas);
	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: selectEstudante
	 * </br>Last Change: 08/10/2011 11:24:38 by marcel
	 * </br>Description: Method that select an Estudante from the given list
	 * </br>******************************</br>
	 * 
	 * @param linkedListestudantes
	 * @return Estudante
	 */
	private Estudante selectEstudante(LinkedList<String> linkedListestudantes) {

		JTextArea jta = new JTextArea();
		jta.setBackground(new JLabel().getBackground());
		jta.setForeground(new JLabel().getForeground());
		jta.setEditable(false);
		jta.setText("Digite o codigo de um dos Estudantes:\n\n"
		        + linkedListestudantes);
		int choice = -1;
		do {
			choice = Integer.parseInt(JOptionPane.showInputDialog(null, jta,
			        "Escolha do assentamento de um estudante",
			        JOptionPane.QUESTION_MESSAGE));
			if (!ctrAssentamento.isInListEstudante(choice)) {
				JOptionPane.showMessageDialog(null, "Disciplina de codigo "
				        + choice + " nao encontrada na lista de disciplinas",
				        "Erro", JOptionPane.ERROR_MESSAGE);
			}
		} while (!ctrAssentamento.isInListEstudante(choice));
		return ctrAssentamento.getInListEstudante(choice);
	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: selectDisciplinas
	 * </br>Last Change: 08/10/2011 11:24:40 by marcel
	 * </br>Description: Method that select some Disciplina from the given list
	 * </br>******************************</br>
	 * 
	 * @param linkedListDisciplinas
	 * @return Vector<Disciplina>
	 */
	private Vector<Disciplina> selectDisciplinas(
	        LinkedList<String> linkedListDisciplinas) {

		JTextArea jta = new JTextArea();
		jta.setBackground(new JLabel().getBackground());
		jta.setForeground(new JLabel().getForeground());
		jta.setEditable(false);
		jta.setText("Digite o codigo de um estudante ou 's' para sair:\n\n"
		        + linkedListDisciplinas);
		Vector<Disciplina> listaEstudantes = new Vector<Disciplina>();
		int choice = -1;
		do {
			String s = JOptionPane.showInputDialog(null, jta,
			        "Escolha da Disciplina da Turma",
			        JOptionPane.QUESTION_MESSAGE);
			if (s.equalsIgnoreCase("s")) {
				break;
			} else {
				choice = Integer.parseInt(s);
				if (!ctrAssentamento.isInListDisciplina(choice)) {
					JOptionPane.showMessageDialog(null,
					        "Estudante de codigo " + choice
					                + " nao encontrado na lista de estudantes",
					        "Erro", JOptionPane.ERROR_MESSAGE);
				} else {
					listaEstudantes.add(ctrAssentamento
					        .getInListDisciplina(choice));
				}
			}

		} while (true);
		return listaEstudantes;
	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: selectOne
	 * </br>Last Change: 08/10/2011 11:24:43 by marcel
	 * </br>Description: Method that select one Turma from the given list and
	 * return its code
	 * </br>******************************</br>
	 * 
	 * @param list
	 * @return the code of the selected Assentamento
	 */
	public int selectOne(LinkedList<String> list) {

		int code = -1;
		code = Integer.parseInt(JOptionPane.showInputDialog(null,
		        "Digite o codigo de um dos itens abaixo:\n\n" + list,
		        "Selecao de Assentamentos", JOptionPane.INFORMATION_MESSAGE));
		return code;
	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: show
	 * </br>Last Change: 08/10/2011 11:24:45 by marcel
	 * </br>Description: Method that show the given String in a JOptionPane
	 * </br>******************************</br>
	 * 
	 * @param string
	 */
	public void show(String string) {

		JTextArea jta = new JTextArea();
		jta.setBackground(new JLabel().getBackground());
		jta.setForeground(new JLabel().getForeground());
		jta.setEditable(false);
		jta.setText(string);
		JOptionPane.showMessageDialog(null, jta, "Assentamento",
		        JOptionPane.INFORMATION_MESSAGE);

	}


	/**
	 * </br>******************************
	 * </br>Package: CCT220_Trabalho04_13106.view
	 * </br>Class: LimiteAssentamento
	 * </br>Method: showAll
	 * </br>Last Change: 08/10/2011 11:24:47 by marcel
	 * </br>Description: Method that show the given LinkedList<String> in a
	 * JOptionPane
	 * </br>******************************</br>
	 * 
	 * @param list
	 */
	public void showAll(LinkedList<String> list) {

		JTextArea jta = new JTextArea();
		jta.setBackground(new JLabel().getBackground());
		jta.setForeground(new JLabel().getForeground());
		jta.setEditable(false);
		jta.setText("Lista de Assentamentos: \n\n" + list);
		JOptionPane.showMessageDialog(null, jta, "Lista Assentamentos",
		        JOptionPane.INFORMATION_MESSAGE);

	}

}
